package s2elinshu;

public class J16Ch05Printers {
	// Printers2VO
	// Printers2Service
	// Printers2IService : Print2Service 의 인터페이스

	public static void main(String[] args) {
		// 기본 프린터
		J16Ch05Printer p = new J16Ch05Printer("중소기업", "번들프린터", "USB2.0");
		System.out.println(p.toString());

		// 잉크젯 프린터
		J16InkjetPrinter ip = new J16InkjetPrinter("가나기업", "잉크젯프린터", "USB2.0");
		System.out.println(ip.toString());

		Printers2Service ps = new Printers2Service();
		ps.print(p);
		ps.print(ip);

	} // public static void main(String[] args)
} // public class J16Ch05Printers

class J16Ch05Printer {
	private String maker;
	private String model;
	private String interf;
	private int counts;
	private int remains;

	// 객체로 만들게 되면 초기화가 되지 않은 변수들은 자동으로 기본값이 들어감
	public J16Ch05Printer(String maker, String model, String interf) {
		this.maker = maker;
		this.model = model;
		this.interf = interf;
	}

	public String getMaker() {	return maker;}
	public void setMaker(String maker) {this.maker = maker;}
	public String getModel() {return model;}
	public void setModel(String model) {this.model = model;}
	public String getInterf() {return interf;}
	public void setInterf(String interf) {this.interf = interf;}
	public int getCounts() {return counts;}
	public void setCounts(int counts) {this.counts = counts;}
	public int getRemains() {return remains;}
	public void setRemains(int remains) {this.remains = remains;}

	@Override
	public String toString() {
		String result = "";
		result += maker + "/" + model + "/" + interf + "/" + counts + "/"+ remains;
		return result;
	}

} // class J16Ch05Printers

class J16InkjetPrinter extends J16Ch05Printer {

	public J16InkjetPrinter(String maker, String model, String interf) {
		super(maker, model, interf);
		// super( , , );는 상속관계에서 부모 클래스를 나타낼 때 사용
		// (부모클래스의 생성자를 나타냄)

	} // public J16InkjetPrinter
		// 부모클래스에 기본생성자가 정의되지 않았기 때문에 자식클래스에서 따로 생성자를 정의해둬야 함

} // class J16InkjetPrinter extends J16Ch05Printer

interface Printers2IService {
	void print(J16Ch05Printer p);
}

class Printers2Service implements Printers2IService {
	@Override
	public void print(J16Ch05Printer p) {
		String result = p.getModel() + "가 문서를 출력합니다.";
		System.out.println(result);
		// 상속 관계이기에 부모 클래스만 불러도 하위에 넣은 정보까지 나타냄.
	}
} // interface Printers2IService

